package com.wx.wechat.service;

import com.wx.core.exception.BusinessJsonException;
import com.wx.wechat.response.WeChatCode2Session;
import com.wx.wechat.response.WeChatOauth2AccessToken;
import com.wx.wechat.response.WeChatUser;

/**
 * @author wx
 * @Description: 微信授权Service接口
 * @date 2018/11/6 000611:57
 */
public interface WeChatOatuhService {
    /**
     * @param redirectURI 重定向地址
     * @param scope       应用授权作用域 1.snsapi_base （不弹出授权页面，直接跳转，只能获取用户openid） 2.snsapi_userinfo （弹出授权页面，可通过openid拿到昵称、性别、所在地。并且， 即使在未关注的情况下，只要用户授权，也能获取其信息 ）
     * @param state       重定向后会带上state参数
     * @description: 微信oauth2授权
     * @author: wx
     * @date: 2018/11/6
     * @return: url redirectURI + code=CODE&state=STATE
     */
    String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state) throws BusinessJsonException;

    /**
     * @param code
     * @description: 用code换取oauth2的AccessToken
     * @author: wx
     * @date: 2018/11/6 0006
     * @return: com.wx.wechat.response.WechatMpOauth2AccessToken
     */
    WeChatOauth2AccessToken oauth2getAccessToken(String code) throws BusinessJsonException;

    /**
     * @param refreshToken
     * @description: 刷新oauth2的AccessToken
     * @author: wx
     * @date: 2018/11/6 0006
     * @return: com.wx.wechat.response.WechatMpOauth2AccessToken
     */
    WeChatOauth2AccessToken oauth2refreshAccessToken(String refreshToken) throws BusinessJsonException;

    /**
     * @param weChatOauth2AccessToken
     * @param lang                    语言 1 简体，2 繁体，3 英语
     * @description: 获取微信用户信息
     * @author: wx
     * @date: 2018/11/6 0006
     * @return: com.wx.wechat.response.WechatUser
     */
    WeChatUser oauth2getUserInfo(WeChatOauth2AccessToken weChatOauth2AccessToken, Integer lang) throws BusinessJsonException;

    /**
     * @param weChatOauth2AccessToken
     * @description: 验证AccessToken是否有效
     * @author: wx
     * @date: 2018/11/6 0006
     * @return: boolean
     */
    Boolean oauth2validateAccessToken(WeChatOauth2AccessToken weChatOauth2AccessToken) throws BusinessJsonException;
    
    /**
     * @description: 微信小程序登录凭证校验(获取微信用户openid)
     * @author: wx
     * @date: 2018/11/6 0006
     * @param code
     * @return: com.wx.wechat.response.WeChatCode2Session
     */
    WeChatCode2Session code2Session(String code) throws BusinessJsonException;
}
